home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 7 / BBS in a Box - Macintosh - Volume VII (BBS in a Box) (January 1993).iso / Files / Hyper / K-L / LSC HYPER XCMD.cpt / XCmdLib.c < prev   
Text File  |  1987-11-03  |  20KB  |  699 lines

  1. /*
  2.     XCmdGlue.inc.c  Definitions for calling all standard 
  3.     HyperCard callback routines from C.  Include "HyperXCmd.h" 
  4.     before your program and this file after it.  Arguments are slightly 
  5.     different from Pascal.  The first argument is always a pointer to
  6.     the parameter block that HyperCard passed to the XCMD or XFCN.
  7.     This file derived from the Pascal interface, which is included as
  8.     comments.
  9.     
  10.       ©Apple Computer, Inc. 1987
  11.     All Rights Reserved.
  12.  
  13.     See CFlash.C for an example of how to include this module in your 
  14.     C program.
  15. */
  16.  
  17. #include <Types.h>
  18. #include <MemoryMgr.h>
  19. #include <OSUtil.h>
  20. #include <QuickDraw.h>
  21.  
  22. #include "XCmd.h"
  23.  
  24. /*  Do a simple jump subroutine to a procedure with no arguments.  The 
  25.     address of the procedure is in the argument.   Declared above in 
  26.     HyperXCmd.h.  */
  27. /*    typedef pascal void (*MyProcPtr) ();*/
  28. #define    MyProcPtr    ProcPtr
  29. /*  PROCEDURE DoJsr(addr: ProcPtr); INLINE $205F,$4E90;  */
  30.  
  31.  
  32. pascal void SendCardMessage(paramPtr,msg)
  33.     XCmdBlockPtr    paramPtr;    StringPtr    msg;
  34.     /* Send a HyperCard message (a command with arguments) to the current card.
  35.        msg is a pointer to a Pascal format string.  */
  36. {
  37.     paramPtr->inArgs[0] = (long)msg;
  38.     paramPtr->request = xreqSendCardMessage;
  39.     (*(MyProcPtr) (paramPtr->entryPoint))();
  40. }
  41. /*    PROCEDURE SendCardMessage(msg: Str255);
  42. BEGIN
  43.   WITH paramPtr^ DO
  44.     BEGIN
  45.       inArgs[1] := ORD(@msg);
  46.       request := xreqSendCardMessage;
  47.       DoJsr(entryPoint);
  48.     END;
  49. END;   */
  50.  
  51.  
  52.  
  53. pascal Handle EvalExpr(paramPtr,expr)
  54.     XCmdBlockPtr    paramPtr;    StringPtr    expr;
  55.     /* Evaluate a HyperCard expression and return the answer.  The answer is
  56.        a handle to a zero-terminated string. */
  57. {
  58.     paramPtr->inArgs[0] = (long)expr;
  59.     paramPtr->request = xreqEvalExpr;
  60.     (*(MyProcPtr) (paramPtr->entryPoint))();
  61.     return (Handle)paramPtr->outArgs[0];
  62. }
  63. /*  FUNCTION EvalExpr(expr: Str255): Handle;
  64. BEGIN
  65.   WITH paramPtr^ DO
  66.     BEGIN
  67.       inArgs[1] := ORD(@expr);
  68.       request := xreqEvalExpr;
  69.       DoJsr(entryPoint);
  70.       EvalExpr := Handle(outArgs[1]);
  71.     END;
  72. END;   */
  73.  
  74.  
  75. pascal long StringLength(paramPtr,strPtr)
  76.     XCmdBlockPtr    paramPtr;    StringPtr    strPtr;
  77. /* Count the characters from where strPtr points until the next zero byte. 
  78.    Does not count the zero itself.  strPtr must be a zero-terminated string. */
  79. {
  80.     paramPtr->inArgs[0] = (long)strPtr;
  81.     paramPtr->request = xreqStringLength;
  82.     (*(MyProcPtr) (paramPtr->entryPoint))();
  83.     return (long)paramPtr->outArgs[0];
  84. }
  85. /*    FUNCTION StringLength(strPtr: Ptr): LongInt;
  86. BEGIN
  87.   WITH paramPtr^ DO
  88.     BEGIN
  89.       inArgs[1] := ORD(strPtr);
  90.       request := xreqStringLength;
  91.       DoJsr(entryPoint);
  92.       StringLength := outArgs[1];
  93.     END;
  94. END;   */
  95.  
  96.  
  97. pascal Ptr StringMatch(paramPtr,pattern,target)
  98.     XCmdBlockPtr    paramPtr;    StringPtr    pattern;    StringPtr    target;
  99. /* Perform case-insensitive match looking for pattern anywhere in
  100.    target, returning a pointer to first character of the first match,
  101.    in target or NIL if no match found.  pattern is a Pascal string,
  102.    and target is a zero-terminated string. */
  103. {
  104.     paramPtr->inArgs[0] = (long)pattern;
  105.     paramPtr->inArgs[1] = (long)target;
  106.     paramPtr->request = xreqStringMatch;
  107.     (*(MyProcPtr) (paramPtr->entryPoint))();
  108.     return (Ptr)paramPtr->outArgs[0];
  109. }
  110. /*    FUNCTION StringMatch(pattern: Str255; target: Ptr): Ptr;
  111. BEGIN
  112.   WITH paramPtr^ DO
  113.     BEGIN
  114.       inArgs[1] := ORD(@pattern);
  115.       inArgs[2] := ORD(target);
  116.       request := xreqStringMatch;
  117.       DoJsr(entryPoint);
  118.       StringMatch := Ptr(outArgs[1]);
  119.     END;
  120. END;   */
  121.  
  122.  
  123. pascal void ZeroBytes(paramPtr,dstPtr,longCount)
  124.     XCmdBlockPtr    paramPtr;    Ptr    dstPtr;    long    longCount;
  125. /* Write zeros into memory starting at destPtr and going for longCount 
  126.    number of bytes. */
  127. {
  128.     paramPtr->inArgs[0] = (long)dstPtr;
  129.     paramPtr->inArgs[1] = longCount;
  130.     paramPtr->request = xreqZeroBytes;
  131.     (*(MyProcPtr) (paramPtr->entryPoint))();
  132. }
  133. /*    PROCEDURE ZeroBytes(dstPtr: Ptr; longCount: LongInt);
  134. BEGIN
  135.   WITH paramPtr^ DO
  136.     BEGIN
  137.       inArgs[1] := ORD(dstPtr);
  138.       inArgs[2] := longCount;
  139.       request := xreqZeroBytes;
  140.       DoJsr(entryPoint);
  141.     END;
  142. END;   */
  143.  
  144.  
  145. pascal Handle PasToZero(paramPtr,pasStr)
  146.     XCmdBlockPtr    paramPtr;    StringPtr    pasStr;
  147. /* Convert a Pascal string to a zero-terminated string.  Returns a handle
  148.    to a new zero-terminated string.  The caller must dispose the handle.
  149.    You'll need to do this for any result or argument you send from 
  150.    your XCMD to HyperTalk. */
  151. {
  152.     paramPtr->inArgs[0] = (long)pasStr;
  153.     paramPtr->request = xreqPasToZero;
  154.     (*(MyProcPtr) (paramPtr->entryPoint))();
  155.     return (Handle)paramPtr->outArgs[0];
  156. }
  157. /*    FUNCTION PasToZero(str: Str255): Handle;
  158. BEGIN
  159.   WITH paramPtr^ DO
  160.     BEGIN
  161.       inArgs[1] := ORD(@str);
  162.       request := xreqPasToZero;
  163.       DoJsr(entryPoint);
  164.       PasToZero := Handle(outArgs[1]);
  165.     END;
  166. END;   */
  167.  
  168.  
  169. pascal void ZeroToPas(paramPtr,zeroStr,pasStr)
  170.     XCmdBlockPtr    paramPtr;    char    *zeroStr;    StringPtr    pasStr;
  171. /* Fill the Pascal string with the contents of the zero-terminated
  172.    string.  You create the Pascal string and pass it in as a VAR 
  173.    parameter.  Useful for converting the arguments of any XCMD to 
  174.    Pascal strings. */
  175. {
  176.     paramPtr->inArgs[0] = (long)zeroStr;
  177.     paramPtr->inArgs[1] = (long)pasStr;
  178.     paramPtr->request = xreqZeroToPas;
  179.     (*(MyProcPtr) (paramPtr->entryPoint))();
  180. }
  181. /*  PROCEDURE ZeroToPas(zeroStr: Ptr; VAR pasStr: Str255);
  182. BEGIN
  183.   WITH paramPtr^ DO
  184.     BEGIN
  185.       inArgs[1] := ORD(zeroStr);
  186.       inArgs[2] := ORD(@pasStr);
  187.       request := xreqZeroToPas;
  188.       DoJsr(entryPoint);
  189.     END;
  190. END;  */
  191.  
  192.  
  193. pascal long StrToLong(paramPtr,strPtr)
  194.     XCmdBlockPtr    paramPtr;    Str31 *    strPtr;
  195. /* Convert a string of ASCII decimal digits to an unsigned long integer. */
  196. {
  197.     paramPtr->inArgs[0] = (long)strPtr;
  198.     paramPtr->request = xreqStrToLong;
  199.     (*(MyProcPtr) (paramPtr->entryPoint))();
  200.     return (long)paramPtr->outArgs[0];
  201. }
  202. /*    FUNCTION StrToLong(str: Str31): LongInt;
  203. BEGIN
  204.   WITH paramPtr^ DO
  205.     BEGIN
  206.       inArgs[1] := ORD(@str);
  207.       request := xreqStrToLong;
  208.       DoJsr(entryPoint);
  209.       StrToLong := outArgs[1];
  210.     END;
  211. END;   */
  212.  
  213.  
  214. pascal long StrToNum(paramPtr,str)
  215.     XCmdBlockPtr    paramPtr;    Str31 *     str;
  216. /* Convert a string of ASCII decimal digits to a signed long integer.
  217.    Negative sign is allowed. */
  218. {
  219.     paramPtr->inArgs[0] = (long)str;
  220.     paramPtr->request = xreqStrToNum;
  221.     (*(MyProcPtr) (paramPtr->entryPoint))();
  222.     return paramPtr->outArgs[0];
  223. }
  224. /*    FUNCTION StrToNum(str: Str31): LongInt;
  225. BEGIN
  226.   WITH paramPtr^ DO
  227.     BEGIN
  228.       inArgs[1] := ORD(@str);
  229.       request := xreqStrToNum;
  230.       DoJsr(entryPoint);
  231.       StrToNum := outArgs[1];
  232.     END;
  233. END;  */
  234.  
  235.  
  236. pascal Boolean StrToBool(paramPtr,str)
  237.     XCmdBlockPtr    paramPtr;    Str31 *     str;
  238. /* Convert the Pascal strings 'true' and 'false' to booleans. */
  239. {
  240.     paramPtr->inArgs[0] = (long)str;
  241.     paramPtr->request = xreqStrToBool;
  242.     (*(MyProcPtr) (paramPtr->entryPoint))();
  243.     return (Boolean)paramPtr->outArgs[0];
  244. }
  245. /*    FUNCTION StrToBool(str: Str31): BOOLEAN;
  246. BEGIN
  247.   WITH paramPtr^ DO
  248.     BEGIN
  249.       inArgs[1] := ORD(@str);
  250.       request := xreqStrToBool;
  251.       DoJsr(entryPoint);
  252.       StrToBool := BOOLEAN(outArgs[1]);
  253.     END;
  254. END;   */
  255.  
  256.  
  257. pascal void StrToExt(paramPtr,str,myext)
  258.     XCmdBlockPtr    paramPtr;    Str31 *     str;    extended *    myext;
  259.  /* Convert a string of ASCII decimal digits to an extended long integer.
  260.     Instead of returning a new extended, as Pascal does, it expects you 
  261.     to create myext and pass it in to be filled. */
  262. {
  263.     paramPtr->inArgs[0] = (long)str;
  264.     paramPtr->inArgs[1] = (long)myext;
  265.     paramPtr->request = xreqStrToExt;
  266.     (*(MyProcPtr) (paramPtr->entryPoint))();
  267. }
  268. /*    FUNCTION StrToExt(str: Str31): Extended;
  269. VAR x: Extended;
  270. BEGIN
  271.   WITH paramPtr^ DO
  272.     BEGIN
  273.       inArgs[1] := ORD(@str);
  274.       inArgs[2] := ORD(@x);
  275.       request := xreqStrToExt;
  276.       DoJsr(entryPoint);
  277.       StrToExt := x;
  278.     END;
  279. END;   */
  280.  
  281.  
  282. pascal void LongToStr(paramPtr,posNum,mystr)
  283.     XCmdBlockPtr    paramPtr;    long     posNum;    Str31 *    mystr;
  284.  /* Convert an unsigned long integer to a Pascal string.  Instead of 
  285.     returning a new string, as Pascal does, it expects you to 
  286.     create mystr and pass it in to be filled. */
  287. {
  288.     paramPtr->inArgs[0] = (long)posNum;
  289.     paramPtr->inArgs[1] = (long)mystr;
  290.     paramPtr->request = xreqLongToStr;
  291.     (*(MyProcPtr) (paramPtr->entryPoint))();
  292. }
  293. /*    FUNCTION LongToStr(posNum: LongInt): Str31;
  294. VAR str: Str31;
  295. BEGIN
  296.   WITH paramPtr^ DO
  297.     BEGIN
  298.       inArgs[1] := posNum;
  299.       inArgs[2] := ORD(@str);
  300.       request := xreqLongToStr;
  301.       DoJsr(entryPoint);
  302.       LongToStr := str;
  303.     END;
  304. END;   */
  305.  
  306.  
  307. pascal void NumToStr(paramPtr,num,mystr)
  308.     XCmdBlockPtr    paramPtr;    long     num;    Str31 *    mystr;
  309.  /* Convert a signed long integer to a Pascal string.  Instead of 
  310.     returning a new string, as Pascal does, it expects you to 
  311.     create mystr and pass it in to be filled. */
  312. {
  313.     paramPtr->inArgs[0] = num;
  314.     paramPtr->inArgs[1] = (long)mystr;
  315.     paramPtr->request = xreqNumToStr;
  316.     (*(MyProcPtr) (paramPtr->entryPoint))();
  317. }
  318. /*    FUNCTION NumToStr(num: LongInt): Str31;
  319. VAR str: Str31;
  320. BEGIN
  321.   WITH paramPtr^ DO
  322.     BEGIN
  323.       inArgs[1] := num;
  324.       inArgs[2] := ORD(@str);
  325.       request := xreqNumToStr;
  326.       DoJsr(entryPoint);
  327.       NumToStr := str;
  328.     END;
  329. END;   */
  330.  
  331.  
  332. pascal void NumToHex(paramPtr,num,nDigits,mystr)
  333.     XCmdBlockPtr    paramPtr;    long     num;
  334.     short    nDigits;            Str31 *    mystr;
  335. /* Convert an unsigned long integer to a hexadecimal number and put it
  336.    into a Pascal string.  Instead of returning a new string, as 
  337.    Pascal does, it expects you to create mystr and pass it in to be filled. */
  338. {
  339.     paramPtr->inArgs[0] = num;
  340.     paramPtr->inArgs[1] = nDigits;
  341.     paramPtr->inArgs[2] = (long)mystr;
  342.     paramPtr->request = xreqNumToHex;
  343.     (*(MyProcPtr) (paramPtr->entryPoint))();
  344. }
  345. /*    FUNCTION NumToHex(num: LongInt; nDigits: INTEGER): Str31;
  346. VAR str: Str31;
  347. BEGIN
  348.   WITH paramPtr^ DO
  349.     BEGIN
  350.       inArgs[1] := num;
  351.       inArgs[2] := nDigits;
  352.       inArgs[3] := ORD(@str);
  353.       request := xreqNumToHex;
  354.       DoJsr(entryPoint);
  355.       NumToHex := str;
  356.     END;
  357. END;   */
  358.  
  359.  
  360. pascal void BoolToStr(paramPtr,bool,mystr)
  361.     XCmdBlockPtr    paramPtr;    Boolean    bool;    Str31 *    mystr;
  362.  /* Convert a boolean to 'true' or 'false'.  Instead of returning 
  363.     a new string, as Pascal does, it expects you to create mystr
  364.     and pass it in to be filled. */
  365. {
  366.     paramPtr->inArgs[0] = (long)bool;
  367.     paramPtr->inArgs[1] = (long)mystr;
  368.     paramPtr->request = xreqBoolToStr;
  369.     (*(MyProcPtr) (paramPtr->entryPoint))();
  370. }
  371. /*    FUNCTION BoolToStr(bool: BOOLEAN): Str31;
  372. VAR str: Str31;
  373. BEGIN
  374.   WITH paramPtr^ DO
  375.     BEGIN
  376.       inArgs[1] := LongInt(bool);
  377.       inArgs[2] := ORD(@str);
  378.       request := xreqBoolToStr;
  379.       DoJsr(entryPoint);
  380.       BoolToStr := str;
  381.     END;
  382. END;   */
  383.  
  384.  
  385. pascal void ExtToStr(paramPtr,myext,mystr)
  386.     XCmdBlockPtr    paramPtr;    extended *    myext;    Str31 *    mystr;
  387.  /* Convert an extended long integer to decimal digits in a string.  
  388.     Instead of returning a new string, as Pascal does, it expects 
  389.     you to create mystr and pass it in to be filled. */
  390. {
  391.     paramPtr->inArgs[0] = (long)myext;
  392.     paramPtr->inArgs[1] = (long)mystr;
  393.     paramPtr->request = xreqExtToStr;
  394.     (*(MyProcPtr) (paramPtr->entryPoint))();
  395. }
  396. /*    FUNCTION ExtToStr(num: Extended): Str31;
  397. VAR str: Str31;
  398. BEGIN
  399.   WITH paramPtr^ DO
  400.     BEGIN
  401.       inArgs[1] := ORD(@num);
  402.       inArgs[2] := ORD(@str);
  403.       request := xreqExtToStr;
  404.       DoJsr(entryPoint);
  405.       ExtToStr := str;
  406.     END;
  407. END;   */
  408.  
  409.  
  410. pascal Handle GetGlobal(paramPtr,globName)
  411.     XCmdBlockPtr    paramPtr;    StringPtr    globName;
  412. /* Return a handle to a zero-terminated string containing the value of 
  413.    the specified HyperTalk global variable. */
  414. {
  415.     paramPtr->inArgs[0] = (long)globName;
  416.     paramPtr->request = xreqGetGlobal;
  417.     (*(MyProcPtr) (paramPtr->entryPoint))();
  418.     return (Handle)paramPtr->outArgs[0];
  419. }
  420. /*    FUNCTION GetGlobal(globName: Str255): Handle;
  421. BEGIN
  422.   WITH paramPtr^ DO
  423.     BEGIN
  424.       inArgs[1] := ORD(@globName);
  425.       request := xreqGetGlobal;
  426.       DoJsr(entryPoint);
  427.       GetGlobal := Handle(outArgs[1]);
  428.     END;
  429. END;   */
  430.  
  431.  
  432. pascal void SetGlobal(paramPtr,globName,globValue)
  433.     XCmdBlockPtr    paramPtr;    StringPtr    globName;    Handle    globValue;
  434. /* Set the value of the specified HyperTalk global variable to be
  435.    the zero-terminated string in globValue.  The contents of the 
  436.    Handle are copied, so you must still dispose it afterwards.  */
  437. {
  438.     paramPtr->inArgs[0] = (long)globName;
  439.     paramPtr->inArgs[1] = (long)globValue;
  440.     paramPtr->request = xreqSetGlobal;
  441.     (*(MyProcPtr) (paramPtr->entryPoint))();
  442. }
  443. /*    PROCEDURE SetGlobal(globName: Str255; globValue: Handle);
  444. BEGIN
  445.   WITH paramPtr^ DO
  446.     BEGIN
  447.       inArgs[1] := ORD(@globName);
  448.       inArgs[2] := ORD(globValue);
  449.       request := xreqSetGlobal;
  450.       DoJsr(entryPoint);
  451.     END;
  452. END;   */
  453.  
  454.  
  455. pascal Handle GetFieldByName(paramPtr,cardFieldFlag,fieldName)
  456.     XCmdBlockPtr    paramPtr;    Boolean    cardFieldFlag;
  457.     StringPtr    fieldName;
  458. /* Return a handle to a zero-terminated string containing the value of 
  459.    field fieldName on the current card.  You must dispose the handle. */
  460. {
  461.     paramPtr->inArgs[0] = (long)cardFieldFlag;
  462.     paramPtr->inArgs[1] = (long)fieldName;
  463.     paramPtr->request = xreqGetFieldByName;
  464.     (*(MyProcPtr) (paramPtr->entryPoint))();
  465.     return (Handle)paramPtr->outArgs[0];
  466. }
  467. /*    FUNCTION GetFieldByName(cardFieldFlag: BOOLEAN; fieldName: Str255): Handle;
  468. BEGIN
  469.   WITH paramPtr^ DO
  470.     BEGIN
  471.       inArgs[1] := ORD(cardFieldFlag);
  472.       inArgs[2] := ORD(@fieldName);
  473.       request := xreqGetFieldByName;
  474.       DoJsr(entryPoint);
  475.       GetFieldByName := Handle(outArgs[1]);
  476.     END;
  477. END;   */
  478.  
  479.  
  480. pascal Handle GetFieldByNum(paramPtr,cardFieldFlag,fieldNum)
  481.     XCmdBlockPtr    paramPtr;    Boolean    cardFieldFlag;
  482.     short    fieldNum;
  483. /* Return a handle to a zero-terminated string containing the value of 
  484.    field fieldNum on the current card.  You must dispose the handle. */
  485. {
  486.     paramPtr->inArgs[0] = (long)cardFieldFlag;
  487.     paramPtr->inArgs[1] = fieldNum;
  488.     paramPtr->request = xreqGetFieldByNum;
  489.     (*(MyProcPtr) (paramPtr->entryPoint))();
  490.     return (Handle)paramPtr->outArgs[0];
  491. }
  492. /*    FUNCTION GetFieldByNum(cardFieldFlag: BOOLEAN; fieldNum: INTEGER): Handle;
  493. BEGIN
  494.   WITH paramPtr^ DO
  495.     BEGIN
  496.       inArgs[1] := ORD(cardFieldFlag);
  497.       inArgs[2] := fieldNum;
  498.       request := xreqGetFieldByNum;
  499.       DoJsr(entryPoint);
  500.       GetFieldByNum := Handle(outArgs[1]);
  501.     END;
  502. END;   */
  503.  
  504.  
  505. pascal Handle GetFieldByID(paramPtr,cardFieldFlag,fieldID)
  506.     XCmdBlockPtr    paramPtr;    Boolean    cardFieldFlag;
  507.     short    fieldID;
  508. /* Return a handle to a zero-terminated string containing the value of 
  509.    the field whise ID is fieldID.  You must dispose the handle. */
  510. {
  511.     paramPtr->inArgs[0] = (long)cardFieldFlag;
  512.     paramPtr->inArgs[1] = fieldID;
  513.     paramPtr->request = xreqGetFieldByID;
  514.     (*(MyProcPtr) (paramPtr->entryPoint))();
  515.     return (Handle)paramPtr->outArgs[0];
  516. }
  517. /*    FUNCTION GetFieldByID(cardFieldFlag: BOOLEAN; fieldID: INTEGER): Handle;
  518. BEGIN
  519.   WITH paramPtr^ DO
  520.     BEGIN
  521.       inArgs[1] := ORD(cardFieldFlag);
  522.       inArgs[2] := fieldID;
  523.       request := xreqGetFieldByID;
  524.       DoJsr(entryPoint);
  525.       GetFieldByID := Handle(outArgs[1]);
  526.     END;
  527. END;   */
  528.  
  529.  
  530. pascal void SetFieldByName(paramPtr,cardFieldFlag,fieldName,fieldVal)
  531.     XCmdBlockPtr    paramPtr;    Boolean    cardFieldFlag;
  532.     StringPtr    fieldName;    Handle    fieldVal;
  533. /* Set the value of field fieldName to be the zero-terminated string 
  534.    in fieldVal.  The contents of the Handle are copied, so you must 
  535.    still dispose it afterwards. */
  536. {
  537.     paramPtr->inArgs[0] = (long)cardFieldFlag;
  538.     paramPtr->inArgs[1] = (long)fieldName;
  539.     paramPtr->inArgs[2] = (long)fieldVal;
  540.     paramPtr->request = xreqSetFieldByName;
  541.     (*(MyProcPtr) (paramPtr->entryPoint))();
  542. }
  543. /*    PROCEDURE SetFieldByName(cardFieldFlag: BOOLEAN; fieldName: Str255; fieldVal: Handle);
  544. BEGIN
  545.   WITH paramPtr^ DO
  546.     BEGIN
  547.       inArgs[1] := ORD(cardFieldFlag);
  548.       inArgs[2] := ORD(@fieldName);
  549.       inArgs[3] := ORD(fieldVal);
  550.       request := xreqSetFieldByName;
  551.       DoJsr(entryPoint);
  552.     END;
  553. END;   */
  554.  
  555.  
  556. pascal void SetFieldByNum(paramPtr,cardFieldFlag,fieldNum,fieldVal)
  557.     XCmdBlockPtr    paramPtr;    Boolean    cardFieldFlag;
  558.     short    fieldNum;            Handle    fieldVal;
  559. /* Set the value of field fieldNum to be the zero-terminated string 
  560.    in fieldVal.  The contents of the Handle are copied, so you must 
  561.    still dispose it afterwards. */
  562. {
  563.     paramPtr->inArgs[0] = (long)cardFieldFlag;
  564.     paramPtr->inArgs[1] = fieldNum;
  565.     paramPtr->inArgs[2] = (long)fieldVal;
  566.     paramPtr->request = xreqSetFieldByNum;
  567.     (*(MyProcPtr) (paramPtr->entryPoint))();
  568. }
  569. /*    PROCEDURE SetFieldByNum(cardFieldFlag: BOOLEAN; fieldNum: INTEGER; fieldVal: Handle);
  570. BEGIN
  571.   WITH paramPtr^ DO
  572.     BEGIN
  573.       inArgs[1] := ORD(cardFieldFlag);
  574.       inArgs[2] := fieldNum;
  575.       inArgs[3] := ORD(fieldVal);
  576.       request := xreqSetFieldByNum;
  577.       DoJsr(entryPoint);
  578.     END;
  579. END;   */
  580.  
  581.  
  582. pascal void SetFieldByID(paramPtr,cardFieldFlag,fieldID,fieldVal)
  583.     XCmdBlockPtr    paramPtr;    Boolean    cardFieldFlag;
  584.     short    fieldID;            Handle    fieldVal;
  585. /* Set the value of the field whose ID is fieldID to be the zero-
  586.    terminated string in fieldVal.  The contents of the Handle are 
  587.    copied, so you must still dispose it afterwards. */
  588. {
  589.     paramPtr->inArgs[0] = (long)cardFieldFlag;
  590.     paramPtr->inArgs[1] = fieldID;
  591.     paramPtr->inArgs[2] = (long)fieldVal;
  592.     paramPtr->request = xreqSetFieldByID;
  593.     (*(MyProcPtr) (paramPtr->entryPoint))();
  594. }
  595. /*    PROCEDURE SetFieldByID(cardFieldFlag: BOOLEAN; fieldID: INTEGER; fieldVal: Handle);
  596. BEGIN
  597.   WITH paramPtr^ DO
  598.     BEGIN
  599.       inArgs[1] := ORD(cardFieldFlag);
  600.       inArgs[2] := fieldID;
  601.       inArgs[3] := ORD(fieldVal);
  602.       request := xreqSetFieldByID;
  603.       DoJsr(entryPoint);
  604.     END;
  605. END;   */
  606.  
  607.  
  608. pascal Boolean StringEqual(paramPtr,str1,str2)
  609.     XCmdBlockPtr    paramPtr;    Str31 *     str1;    Str31 *     str2;
  610. /* Return true if the two strings have the same characters.  
  611.    Case insensitive compare of the strings. */
  612. {
  613.     paramPtr->inArgs[0] = (long)str1;
  614.     paramPtr->inArgs[1] = (long)str2;
  615.     paramPtr->request = xreqStringEqual;
  616.     (*(MyProcPtr) (paramPtr->entryPoint))();
  617.     return (Boolean)paramPtr->outArgs[0];
  618. }
  619. /*    FUNCTION StringEqual(str1,str2: Str255): BOOLEAN;
  620. BEGIN
  621.   WITH paramPtr^ DO
  622.     BEGIN
  623.       inArgs[1] := ORD(@str1);
  624.       inArgs[2] := ORD(@str2);
  625.       request := xreqStringEqual;
  626.       DoJsr(entryPoint);
  627.       StringEqual := BOOLEAN(outArgs[1]);
  628.     END;
  629. END;   */
  630.  
  631.  
  632. pascal void ReturnToPas(paramPtr,zeroStr,pasStr)
  633.     XCmdBlockPtr    paramPtr;    Ptr    zeroStr;    StringPtr    pasStr;
  634. /* zeroStr points into a zero-terminated string.  Collect the 
  635.    characters from there to the next carriage Return and return 
  636.    them in the Pascal string pasStr.  If a Return is not found, 
  637.    collect chars until the end of the string. */
  638. {
  639.     paramPtr->inArgs[0] = (long)zeroStr;
  640.     paramPtr->inArgs[1] = (long)pasStr;
  641.     paramPtr->request = xreqReturnToPas;
  642.     (*(MyProcPtr) (paramPtr->entryPoint))();
  643. }
  644. /*    PROCEDURE ReturnToPas(zeroStr: Ptr; VAR pasStr: Str255);
  645. BEGIN
  646.   WITH paramPtr^ DO
  647.     BEGIN
  648.       inArgs[1] := ORD(zeroStr);
  649.       inArgs[2] := ORD(@pasStr);
  650.       request := xreqReturnToPas;
  651.       DoJsr(entryPoint);
  652.     END;
  653. END;   */
  654.  
  655.  
  656. pascal void ScanToReturn(paramPtr,scanHndl)
  657.     XCmdBlockPtr    paramPtr;    Ptr *    scanHndl;
  658. /* Move the pointer scanPtr along a zero-terminated 
  659.    string until it points at a Return character
  660.    or a zero byte.  */
  661. {
  662.     paramPtr->inArgs[0] = (long)scanHndl;
  663.     paramPtr->request = xreqScanToReturn;
  664.     (*(MyProcPtr) (paramPtr->entryPoint))();
  665. }
  666. /*    PROCEDURE ScanToReturn(VAR scanPtr: Ptr);
  667. BEGIN
  668.   WITH paramPtr^ DO
  669.     BEGIN
  670.       inArgs[1] := ORD(@scanPtr);
  671.       request := xreqScanToReturn;
  672.       DoJsr(entryPoint);
  673.     END;
  674. END;   */
  675.  
  676.  
  677. pascal void ScanToZero(paramPtr,scanHndl)
  678.     XCmdBlockPtr    paramPtr;    Ptr *    scanHndl;
  679. /* Move the pointer scanPtr along a zero-terminated 
  680.    string until it points at a zero byte.  */
  681. {
  682.     paramPtr->inArgs[0] = (long)scanHndl;
  683.     paramPtr->request = xreqScanToZero;
  684.     (*(MyProcPtr) (paramPtr->entryPoint))();
  685. }
  686. /*    PROCEDURE ScanToZero(VAR scanPtr: Ptr);
  687. BEGIN
  688.   WITH paramPtr^ DO
  689.     BEGIN
  690.       inArgs[1] := ORD(@scanPtr);
  691.       request := xreqScanToZero;
  692.       DoJsr(entryPoint);
  693.     END;
  694. END;   */
  695.  
  696.  
  697.  
  698.  
  699.